const { sources, Compilation } = require('vite');
const path = require('path');
const fse = require('fs-extra');

export default function myVitePlugin(options = {}) {
    // 插件名称（推荐以 vite-plugin- 开头，便于识别）
    const name = 'vite-plugin-translate';

    // 谷歌翻译一次最大支持字符
    const GOOGLE_MAX_CHAR_LIMIT = 5000;

    console.log("options-------------->", options);
    /**
     * @param {*} { translateApiUrl: 翻译APi地址， text: 需要翻译的文本， from: 源语言， to: 目标语言, separator: 词组分割符}
     * @returns
     */
    function transform({ translateApiUrl, text, from, to }) {
        // let url = `${translateApiUrl}?text=${text}&from=${from}&to=${to}`;
        return fetch(translateApiUrl, {
            method: 'POST',
            headers: {
                'Content-Type': 'application/json',
            },
            mode: 'cors',
            body: JSON.stringify({ text, from, to }),
        })
            .then((res) => {
                return res.json();
            })
            .then((res) => {
                return res.result;
            })
            .catch((err) => {
                console.log(`Translation error, Check that the API is available: ${err}`);
            });
    }
    class TransformLanguageWebpackPlugin {
        constructor(options = {}) {
            const defaultOptions = {
                translateApiUrl: 'http://127.0.0.1:8999/api',
                from: 'en',
                to: 'zh-CN', // zh-TW
                separator: '-',
                regex: /[\u4e00-\u9fa5]/g,
                outputTxt: false,
                limit: GOOGLE_MAX_CHAR_LIMIT,
            };
            if (!options.translateApiUrl)
                throw new ReferenceError('The translateApiUrl parameter is required');
            this.options = { ...defaultOptions, ...options };
        }
    }

    return {
        // 必须的属性，表示插件名称
        name,

        // 可选的钩子：配置解析完成后的钩子
        configResolved(config) {
            console.log('Vite 配置已解析：', config);
        },

        // 可选的钩子：修改代码内容
        transform(code, id) {
            // 简单例子：对 .js 文件添加一行注释
            if (id.endsWith('.js')) {
                return `// My Plugin Modified\n${code}`;
            }
        },

        // 可选的钩子：处理模块解析 test
        resolveId(source) {
            // 示例：自定义模块解析逻辑
            if (source === 'virtual-module') {
                return source; // 返回一个虚拟模块
            }
        },

        // 可选的钩子：加载模块内容
        load(id) {
            if (id === 'virtual-module') {
                return 'export default "This is a virtual module!"';
            }
        }
    };
}
